package com.modelo.entity;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

 
@Entity
@Table(name = "documento", catalog = "firmes")
public class Documento implements java.io.Serializable {
	
	public static final String FECHA_BAJA = "fechaBaja";

	 
	private static final long serialVersionUID = 1L;
	
	private Integer id;
	private Tipo tipos;
	private String nombre;
	private String descripcion;
	private Integer caducidad;
	private Date fechaAlta;
	private Date fechaBaja;
	private Integer esComunObras;
	private Set<ProveedorDocumento> proveedorDocumentos = new HashSet<ProveedorDocumento>(
			0);
	private Set<ObraDocumento> obraDocumentos = new HashSet<ObraDocumento>(0);
 
	public Documento() {
	}
 
	public Documento(Integer idDocumento, Tipo tipos, String nombre,
			Integer caducidad, Date fechaAlta) {
		this.id = idDocumento;
		this.tipos = tipos;
		this.nombre = nombre;
		this.caducidad = caducidad;
		this.fechaAlta = fechaAlta;
	}
 
	public Documento(Integer idDocumento, Tipo tipos, String nombre,
			String descripcion, Integer caducidad, Date fechaAlta,
			Date fechaBaja, Integer esComunObras,
			Set<ProveedorDocumento> proveedorDocumentos,
			Set<ObraDocumento> obraDocumentos) {
		this.id = idDocumento;
		this.tipos = tipos;
		this.nombre = nombre;
		this.descripcion = descripcion;
		this.caducidad = caducidad;
		this.fechaAlta = fechaAlta;
		this.fechaBaja = fechaBaja;
		this.esComunObras = esComunObras;
		this.proveedorDocumentos = proveedorDocumentos;
		this.obraDocumentos = obraDocumentos;
	}
 
	@Id
	@GeneratedValue
	@Column(name = "idDocumento", unique = true, nullable = false)
	public Integer getId() {
		return this.id;
	}

	public void setId(Integer idDocumento) {
		this.id = idDocumento;
	}

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "idTipo", nullable = false)
	public Tipo getTipos() {
		return this.tipos;
	}

	public void setTipos(Tipo tipos) {
		this.tipos = tipos;
	}

	@Column(name = "Nombre", nullable = false, length = 200)
	public String getNombre() {
		return this.nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	@Column(name = "Descripcion", length = 300)
	public String getDescripcion() {
		return this.descripcion;
	}

	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}

	@Column(name = "Caducidad", nullable = false)
	public Integer getCaducidad() {
		return this.caducidad;
	}

	public void setCaducidad(Integer caducidad) {
		this.caducidad = caducidad;
	}

	@Temporal(TemporalType.DATE)
	@Column(name = "fechaAlta", nullable = false, length = 10)
	public Date getFechaAlta() {
		return this.fechaAlta;
	}

	public void setFechaAlta(Date fechaAlta) {
		this.fechaAlta = fechaAlta;
	}

	@Temporal(TemporalType.DATE)
	@Column(name = "fechaBaja", length = 10)
	public Date getFechaBaja() {
		return this.fechaBaja;
	}

	public void setFechaBaja(Date fechaBaja) {
		this.fechaBaja = fechaBaja;
	}

	@Column(name = "esComunObras")
	public Integer getEsComunObras() {
		return this.esComunObras;
	}

	public void setEsComunObras(Integer esComunObras) {
		this.esComunObras = esComunObras;
	}

	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "documento")
	public Set<ProveedorDocumento> getProveedorDocumentos() {
		return this.proveedorDocumentos;
	}

	public void setProveedorDocumentos(
			Set<ProveedorDocumento> proveedorDocumentos) {
		this.proveedorDocumentos = proveedorDocumentos;
	}

	@OneToMany(fetch = FetchType.LAZY, mappedBy = "documento")
	public Set<ObraDocumento> getObraDocumentos() {
		return this.obraDocumentos;
	}

	public void setObraDocumentos(Set<ObraDocumento> obraDocumento) {
		this.obraDocumentos = obraDocumentos;
	}
	
	@Override
	public String toString(){
		return getNombre() +" - "+ getTipos().getNombre();
	}

}